#include<stdio.h>
#include<string.h>
#include<assert.h>

//void * memcpy ( void * destination, const void * source, size_t num );1
//int main()
//{
//	int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };
//	int arr2[10] = { 0 };
//	memcpy(arr2+1, arr1, 20);
//	int i = 0;
//	for (i = 0; i < 10; i++) {
//		printf("%d\n", arr2[i]);
//	}
//	return 0;
//}

//模拟memcpy
//void* my_memcpy(int* arr2, int* arr1, int sz) {
//	int i = 0; //在函数内部，arr2 和 arr1 指针会在循环中逐字节移动（通过 (char*)arr2 + 1），因此原始的起始地址会丢失。
//	void* ret = arr2;
//	assert(arr2 && arr1);
//
//	while (sz--) {
//		*(char*)arr2 = *(char*)arr1;
//		arr2 = (char*)arr2 + 1;
//		arr1 = (char*)arr1 + 1;
//	}
//	return ret;
//}
//
//
//int main()
//{
//	int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };
//	int arr2[10] = { 0 };
//	int* p = my_memcpy(arr2, arr1, 40);
//	int i = 0;
//	for (i = 0; i < 10; i++) {
//		printf("%d\n", arr2[i]);
//	}
//	return 0;
//}


////void * memmove ( void * destination, const void * source, size_t num );1
//int main()
//{
//	int arr[10] = { 1,2,3,4,5,6 };
//	int arr2[10] = { 1,2,3,4 };
//	memmove(arr2, arr, 16);
//	int i = 0;
//	for (i = 0; i < 10; i++) {
//		printf("%d\n", arr[i]);
//	}
//	return 0;
//}


//memmove的模拟
//void* my_memmove(int* des, int* src, int sz) {
//	void* ret = des;
//	assert(des && src);
//	//前 到 后
//	if (des < src){
//		while (sz--) {
//			*(char*)des = *(char*)src;
//			des = (char*)des + 1;
//			src = (char*)src + 1;
//		}
//	}
//	else {
//      while(sz--){
//		*((char*)des + sz) = *((char*)src + sz);
//     }
//	}
//	return ret;
//}
//
//int main()
//{
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	int* ret = my_memmove(arr+2, arr, 20);
//	int i = 0;
//	for (i = 0; i < 10; i++) {
//		printf("%d\n", ret[i]);
//	}
//	return 0;
//}


//memset是⽤来设置内存的，将内存中的值以字节为单位设置成想要的内容
//int memcmp ( const void * ptr1, const void * ptr2, size_t num );
//int main()
//{
//	char str[] = "hello world";
//	memset(str, 'w', 7);
//	printf(str);
//	return 0;
//}


//int memcmp ( const void * ptr1, const void * ptr2, size_t num );
//memcmp的使用
//int main()
//{
//	char arr1[] = "ABCDEFDC";
//	char arr2[] = "ABCDEFAD";
//	int n = 0;
//	n = memcmp(arr1, arr2, 4);
//	if(n > 0)
//		printf("'%s' is greater than '%s'.\n", arr1, arr2);
//	else if(n < 0)
//		printf("'%s' is less than '%s'.\n", arr2, arr1);
//	else
//		printf("'%s' is same than '%s'.\n", arr1, arr2);
//	return 0;
//}
